package com.zg.scf.domain.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.zg.common.core.vo.BaseVo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotEmpty;
import java.math.BigDecimal;
import java.util.Date;

/**
 * DESCRIPTION
 *
 * @author zhanfeng.liang
 * @since 2025-07-21
 */

@ApiModel(value = "产品类型PageReq")
@Data
public class ProductTypeVo  extends BaseVo {
    @ApiModelProperty(
            value = "主键 ID",
            example = "1",
            notes = "自增主键，无需手动设置，系统自动生成"
    )
    private Long id;

    @ApiModelProperty(
            value = "产品类型",
            example = "企业经营贷",
            notes = "贷款产品的类型描述，如企业经营贷、供应链融资、固定资产贷款等"
    )
    private String type;

    @ApiModelProperty(
            value = "额度区间下限（万元）",
            example = "50.0",
            notes = "客户可申请的最低贷款金额，取值范围根据产品而定"
    )
    private BigDecimal amountLow;

    @ApiModelProperty(
            value = "额度区间上限（万元）",
            example = "500.0",
            notes = "客户可申请的最高贷款金额，需大于等于下限"
    )
    private BigDecimal amountHigh;

    @ApiModelProperty(
            value = "利率区间下限（%）",
            example = "3.5",
            notes = "实际执行利率的最小值，根据市场情况和客户资质浮动"
    )
    private BigDecimal rateLow;

    @ApiModelProperty(
            value = "利率区间上限（%）",
            example = "6.0",
            notes = "实际执行利率的最大值，需大于等于下限"
    )
    private BigDecimal rateHigh;

    @ApiModelProperty(
            value = "贷款期限下限（年）",
            example = "1",
            notes = "客户可选择的最短贷款期限，通常为整数年"
    )
    private Integer termLow;

    @ApiModelProperty(
            value = "贷款期限上限（年）",
            example = "5",
            notes = "客户可选择的最长贷款期限，需大于等于下限"
    )
    private Integer termHigh;

    @ApiModelProperty(
            value = "适用场景",
            example = "国内",
            notes = "贷款适用的业务场景，可选值：国内、国际"
    )
    private String applicableScenario;

    @ApiModelProperty(
            value = "是否信用贷",
            example = "1",
            notes = "是否为信用贷款（无需抵押担保），1:是，0:否"
    )
    private Integer isCredit;

    @ApiModelProperty(
            value = "是否抵押",
            example = "1",
            notes = "是否需要提供抵押物，1:是，0:否"
    )
    private Integer isMortgage;

    @ApiModelProperty(
            value = "是否担保",
            example = "1",
            notes = "是否需要提供担保人，1:是，0:否"
    )
    private Integer isGuarantee;

    @ApiModelProperty(
            value = "是否缴纳保证金",
            example = "1",
            notes = "是否需要缴纳贷款保证金，1:缴纳，0:不缴纳"
    )
    private Integer isDeposit;

    @ApiModelProperty(
            value = "还款方式",
            example = "等额本息,按月付息到期还本",
            notes = "支持的还款方式，多选以逗号分隔，可选值：等额本息、等额本金、按月付息到期还本、利随本清等"
    )
    private String repaymentMethod;

    @ApiModelProperty(
            value = "授信审批时间开始",
            example = "2025-07-22",
            notes = "预计最早完成授信审批的日期，格式：yyyy-MM-dd"
    )
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date approvalTimeLow;

    @ApiModelProperty(
            value = "授信审批时间结束",
            example = "2025-07-31",
            notes = "预计最晚完成授信审批的日期，需晚于或等于开始时间"
    )
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date approvalTimeHigh;

    @ApiModelProperty(
            value = "放款审批时间开始",
            example = "2025-07-22",
            notes = "预计最早完成放款审批的日期，格式：yyyy-MM-dd"
    )
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date disbursementTimeLow;

    @ApiModelProperty(
            value = "放款审批时间结束",
            example = "2025-07-31",
            notes = "预计最晚完成放款审批的日期，需晚于或等于开始时间"
    )
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date disbursementTimeHigh;

    @ApiModelProperty(
            value = "产品分类",
            example = "应收类",
            notes = "产品所属的业务分类，可选值：应收类、预付类、存货类等"
    )
    private String category;

    @ApiModelProperty(
            value = "状态",
            example = "1",
            notes = "产品状态，可选值：1:正常，0:停止"
    )
    private String state;
}
